/**
 * 函数的类型签名：(name: string) => number
 * 如果说，变量的类型是描述了这个变量的值类型，
 * 那么，函数的类型 就是 描述了 函数入参类型 与 函数返回值类型，它们同样使用 : 的语法进行类型标注
 * 
 * (name: string) => number：它是 ES6 的重要特性之一：箭头函数。
 * 但在这里，它其实是 TypeScript 中的 函数类型签名。
*/
function foo(name: string): number {
    return name.length;
}
//在 函数表达式 中进行类型声明的方式是这样的：
const fooA = function (name: string): number {
    return name.length
}
//也可以像对变量进行类型标注那样，对 foo 这个变量进行类型声明
const fooB: (name: string) => number = function (name) {
    return name.length
}
//对于实际的箭头函数，类型标注也是类似的：
const fooC = (name: string): number => {
    return name.length
}

/**
 * 如果只是为了描述这个函数的类型结构，甚至可以使用 interface 来进行函数声明：
 * 这时的 interface 被称为 Callable Interface，
 * 看起来可能很奇怪，但我们可以这么认为，interface 就是用来描述一个类型结构的，
 * 而函数类型本质上也是一个结构固定的类型罢了。
 * */
interface FuncFooStruct {
    (name: string): number
}
const fooE: FuncFooStruct = (name) => {
    return name.length
}


//export {}：解决“无法重新声明块范围变量”错误提示问题
export {}